package org.tio.sitexxx.service.vo;

import java.util.Objects;

import org.tio.utils.jfinal.P;
import org.tio.utils.time.Time;

/**
 * @author tanyaowu 
 * 2016年9月19日 下午5:04:12
 */
public class Const {

	/**
	 * 特殊字符
	 */
	public static final char[] SPECIAL_CHARACTER = new char[] { '<', '>', '\"', '\'', '\\', '/', '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '+', '[', ']',
	        '{', '}', '＠', '￥' };

	/**
	 * 握手签名时的key
	 */
	public static final String HANDSHAKE_KEY = "xfDoiRnj";

	public static final String CHARSET = "utf-8";

	/**
	 * 在ChannelContext存放ImSessionContext对象的key
	 */
	public static final String IM_SESSION_KEY = "im_session_key";

	/**
	 * 用来做测试的groupid，随时会变和被取消
	 */
	public static final String TEST_GROUPID = "45";

	/**
	 * 上传资源服务器存放上传文件的根目录
	 */
	public static final String RES_ROOT = P.get("res.root");

	/**
	 * web服务IP地址/域名
	 */
	public static final String SERVICE_HOST = P.get("my.ip");

	/**
	 * 上传资源服务器
	 */
	public static final String RES_SERVER = P.get("res.server");

	/**
	 * tio监控数据统计时段
	 * @author tanyaowu 
	 * 2016年10月30日 下午1:34:46
	 */
	public static interface IpStatDuration {
		public static final Long DURATION_1 = Time.MINUTE_1 * 5;
		//		public static final Long DURATION_2 = Time.MINUTE_1 * 10;
		//		public static final Long DURATION_3 = Time.HOUR_1 * 1;

		public static final Long[] IPSTAT_DURATIONS = new Long[] { DURATION_1/**, DURATION_2, DURATION_3 */
		};
	}

	/**
	 * im 群组的子群
	 * @author tanyaowu
	 *
	 */
	public static interface ImGroupType {

		String PREFIX = "_$x-_";

		/**
		 * 所有用户都加入这个组
		 */
		String ALL_IN_ONE = PREFIX + "_allinone";

		/**
		 * 真实用户
		 */
		String REAL = PREFIX + "_real_";

		/**
		 * 所有用户
		 */
		String ALL = PREFIX + "_";

		/**
		 * 绑定省
		 */
		String PROVINCE = PREFIX + "PROVINCE_";

		/**
		 * 绑定市
		 */
		String CITY = PREFIX + "CITY_";

		/**
		 * 运营商
		 */
		String OPERATOR = PREFIX + "OPERATOR_";
	}

	/**
	 * ip访问路径统计
	 * @author tanyaowu 
	 * 2016年10月30日 下午1:34:29
	 */
	public static interface IpPathAccessStatDuration {
		//		public static final long DURATION_1 = Time.SECOND_1 * 10;
		public static final long DURATION_2 = Time.MINUTE_1 * 5;
		//		public static final long DURATION_3 = Time.HOUR_1 * 1;

		//		public static final Long[] IP_PATH_ACCESS_STAT_DURATIONS = new Long[] { DURATION_1 };
		public static final Long[] IP_PATH_ACCESS_STAT_DURATIONS = new Long[] { DURATION_2 };

	}

	public static interface TokenPathAccessStatDuration {
		//		public static final long DURATION_1 = Time.SECOND_1 * 10;
		public static final long DURATION_2 = Time.MINUTE_1 * 5;
		//		public static final long DURATION_3 = Time.HOUR_1 * 1;

		//		public static final Long[] IP_PATH_ACCESS_STAT_DURATIONS = new Long[] { DURATION_1 };
		public static final Long[] TOKEN_PATH_ACCESS_STAT_DURATIONS = new Long[] { DURATION_2 };

	}

	public static interface ImPort {
		/**
		 * pc端的端口(websocket的端口)
		 */
		public Integer WS = P.getInt("im.port.ws");
		
		/**
		 * pc端的端口(websocket的端口)
		 */
		public Integer APP = P.getInt("im.port.app");

	}

	/**
	 * 网站地址
	 */
	public static String SITE = P.get("site");

	public static String API_CONTEXTPATH = P.get("http.api.contextpath", "/mytio");

	public static String API_SUFFIX = P.get("http.api.suffix", ".tio_x");

	public static interface Path {
		/**
		 * 登录页
		 */
		String LOGIN = "/login/index.html";

		/**
		 * 阅读博客
		 */
		String BLOG_VIEW = "/blog/r/index.html";

		/**
		 * tio文档
		 */
		String DOC_TIO = "/doc/tio/index.html";
		
		/**
		 * tio官网代码的文档
		 */
		String DOC_TIO_SITE = "/doc/site/index.html";

		/**
		 * 拿博客数据
		 */
		String BLOG_DATA = "/blog/r/blog-view-onlyhtml.html";//"/blog/r/blog-view.html";
	}

	/**
	 * view层，公共model的key
	 * @author tanyaowu
	 */
	public static interface ModelKey {
		String	TITLE						= "title";
		String	KEYWORDS					= "keywords";
		String	DESCRIPTION					= "description";
		String	RES_SERVER					= "res_server";
		String	JS_VERSION					= "js_version";
		String	API_CONTEXTPATH				= "api_ctx";				//  "/api"
		String	API_SUFFIX					= "api_suf";				//  ".php"
		String	HTTP_SESSION_COOKIE_NAME	= "session_cookie_name";	// "TIO_SESSION"

	}

	/**
	 * 数据库名字常量
	 * @author tanyaowu 
	 * 2016年10月20日 下午4:04:51
	 */
	public static interface Db {
		/**
		 * tio_sitex_main数据库
		 */
		String	TIO_SITE_MAIN	= "tio_sitex_main";
		/**
		 * tio_sitex_stat数据库
		 */
		String	TIO_SITE_STAT	= "tio_sitex_stat";
		/**
		 * tio_sitex_conf数据库
		 */
		String	TIO_SITE_CONF	= "tio_sitex_conf";

	}

	/**
	 * 历史表
	 * @author tanyw
	 *
	 */
	public static interface HistoryTable {
		/**
		 * 历史表后缀
		 */
		public static final String HISTORY_TABLE_SUFFIX = "_x_his";
	}

	/**
	 * 上传目录
	 * @author tanyaowu 
	 */
	public static interface UPLOAD_DIR {

		/**
		 * im上传视频的目录
		 */
		public static final String IM_VIDEO = "im/upload/video";

		/**
		 * im上传图片的目录
		 */
		public static final String IM_IMG = "im/upload/img";

		/**
		 * blog上传图片的目录
		 */
		public static final String BLOG_IMG = "blog/upload/img";

		/**
		 * 用户上传头像的目录
		 */
		public static final String USER_AVATAR = "user/avatar";
	}

	public static interface ZkNode {
		/**
		 * 根节点
		 */
		String ROOT = "/tio-site";

		/**
		 * IM服务器
		 * 该节点下的数据形如:<br>
		 * |--192.168.0.1<br>
		 * |--192.168.0.2<br>
		 * |--192.168.0.3<br>
		 */
		String IM_SERVERS = ROOT + "/im-server";

	}

	/**
	 * topic常量，前后台要一致
	 * @author tanyaowu 
	 * 2016年11月8日 下午4:16:25
	 */
	public static interface Topic {

		/**
		 * 通用topic
		 */
		String COMMON_TOPIC = "COMMON_TOPIC";

		/**
		 * 清除http cache
		 */
		String CLEAR_HTTP_CACHE = "CLEAR_HTTP_CACHE";

		/**
		 * 把ip拉黑
		 */
		String PULL_IP_TO_BLACK = "PULL_IP_TO_BLACK";

		/**
		 * 清空html-view的缓存
		 */
		String CLEAN_VIEW_CACHE = "CLEAN_VIEW_CACHE";

	}

	/**
	 * 角色id
	 * 
	 */
	public static interface Role {

		/**
		 * 超级管理员
		 */
		byte ADMIN_SUPER = 99;

		/**
		 * 普通管理员
		 */
		byte ADMIN_NORMAL = 1;

		/**
		 * 用户
		 */
		byte NORMAL = 2;

		/**
		 * 上传视频的角色
		 */
		byte UPLOAD_VIDEO = 6;

		/**
		 * 允许阅读文档的角色
		 */
		byte ALLOW_READ_DOC = 7;//allow_read_doc

		/**
		 * 已经支付文档费用的角色
		 */
		byte PAID_DOC = 8; //paid_doc
		
		/**
		 *   已经购买t-io官网源代码的角色
		 */
		byte PAID_SITECODE = 9; //paid_doc
		
		/**
		 * 购买了官网代码旗舰版的用户
		 */
		byte PAID_SITECODE_QIJIAN = 94; //paid_doc

	}

	/**
	 * 标准状态常量
	 * 
	 */
	public static interface Status {
		/**
		 * 正常
		 */
		byte	NORMAL		= 1;
		/**
		 * 禁用
		 */
		byte	DISABLED	= 2;

		/**
		 * 删除
		 */
		byte DELETE = 3;
	}

	/**
	 * 
	 * @author: tanyaowu
	 */
	private Const() {
	}

	public static interface AccessToken {
		/**
		 * 存令牌(access_token)的cookie name
		 */
		public static final String COOKIENAME_FOR_ACCESSTOKEN = "tio_access_token";
	}

	/**
	 * 加入群组响应码
	 * 
	 */
	public enum JoinGroupResult {
		/**
		 * 进入成功
		 */
		OK((byte) 1),

		/**
		 * 组不存在
		 */
		FAIL_GROUP_NOT_EXIST((byte) 2),

		/**
		 * 组满
		 */
		FAIL_GROUP_FULL((byte) 3),

		/**
		 * 你在黑名单中
		 */
		FAIL_IN_BLACK_LIST((byte) 4),
		/**
		 * 被踢
		 */
		FAIL_KICKED((byte) 5),
		/**
		 * 不允许游客进行
		 */
		FAIL_TOURIST_NOT_ALLOWED((byte) 6),
		/**
		 * 其它原因
		 */
		FAIL_OTHER((byte) 99);

		public static JoinGroupResult from(Byte value) {
			JoinGroupResult[] values = JoinGroupResult.values();
			for (JoinGroupResult v : values) {
				if (Objects.equals(v.value, value)) {
					return v;
				}
			}
			return null;
		}

		Byte value;

		private JoinGroupResult(Byte value) {
			this.value = value;
		}

		public Byte getValue() {
			return value;
		}

		public void setValue(Byte value) {
			this.value = value;
		}
	}

	/**
	 * 区域显示状态
	 * 
	 */
	public static interface AreaViewStatus {
		/**
		 * 显示
		 */
		byte VIEW = 1;

		/**
		 * 隐藏
		 */
		byte HIDDEN = 2;
	}

	/**
	 * 该类定义的，单位都是秒
	 * @author tanyaowu
	 */
	public static class CacheTime {
		/**
		 * 60秒
		 */
		public static final long SECOND_60 = 60;
	}

	public static interface UrlParamName {
		/**
		 * 登录后重定向的地址
		 */
		String REDIRECT_URI_AFTER_LOGIN = "redirect_uri_after_login";
	}

	/**
	 * 一些固定的聊天群组
	 * @author tanyaowu
	 *
	 */
	public static interface GroupId {

		/**
		 * 全站聊天的groupid
		 */
		//		int TIO_SITE_GROUP = 19821015;

		/**
		 * 全站聊天的groupid
		 */
		String ALL = "-1";
	}

	/**
	 * 一些内置的ChannelContextId
	 * @author tanyaowu
	 *
	 */
	public static interface ChannelContextId {

		/**
		 * 系统内置的ChannelContextId
		 */
		String SYSTEM = "1";
	}

	public static interface Http {
		String SESSION_COOKIE_NAME = P.get("http.session.cookie.name", "tio_session");
	}

	/**
	 * @param args
	 * @author: tanyaowu
	 */
	public static void main(String[] args) {

	}
}
